--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
meshchatx/src/frontend/js/HeapMonitor.js a9cc4b996b8da8ff414e305825f372ca12dc138d (a9cc4b99) Text, 2.38 KB
T8b949e// SPDX-License-Identifier: 0BSD
Tff7b72let Te6edf3intervalId Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72const Te6edf3DEFAULT_INTERVAL Tff7b72= T79c0ff5000Tb4b4b4;
Tff7b72function Te6edf3formatBytesTb4b4b4(Te6edf3bytesTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3bytes Tff7b72< T79c0ff1024Tb4b4b4) Tff7b72return Ta5d6ff`Tffd700${Te6edf3bytesTffd700}Ta5d6ff BTa5d6ff`Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3bytes Tff7b72< T79c0ff1048576Tb4b4b4) Tff7b72return Ta5d6ff`Tffd700${Tb4b4b4(Te6edf3bytes Tff7b72/ T79c0ff1024Tb4b4b4)Tb4b4b4.Te6edf3toFixedTb4b4b4(T79c0ff1Tb4b4b4)Tffd700}Ta5d6ff KBTa5d6ff`Tb4b4b4;
Tff7b72return Ta5d6ff`Tffd700${Tb4b4b4(Te6edf3bytes Tff7b72/ T79c0ff1048576Tb4b4b4)Tb4b4b4.Te6edf3toFixedTb4b4b4(T79c0ff1Tb4b4b4)Tffd700}Ta5d6ff MBTa5d6ff`Tb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3sampleTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3m Tff7b72= Te6edf3performanceTb4b4b4.Te6edf3memoryTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3mTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(
Ta5d6ff"[HeapMonitor] performance.memory not available (requires Chrome with --enable-precise-memory-info)"
Tb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72return Tb4b4b4{
Te6edf3heapTff7b72: Te6edf3mTb4b4b4.Te6edf3usedJSHeapSizeTb4b4b4,
Te6edf3totalTff7b72: Te6edf3mTb4b4b4.Te6edf3totalJSHeapSizeTb4b4b4,
Te6edf3limitTff7b72: Te6edf3mTb4b4b4.Te6edf3jsHeapSizeLimitTb4b4b4,
Te6edf3tsTff7b72: Tffa657DateTb4b4b4.Te6edf3nowTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3logTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3s Tff7b72= Te6edf3sampleTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3sTb4b4b4) Tff7b72returnTb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(
Ta5d6ff`Ta5d6ff[HeapMonitor] Tffd700${Te6edf3formatBytesTb4b4b4(Te6edf3sTb4b4b4.Te6edf3heapTb4b4b4)Tffd700}Ta5d6ff used / Tffd700${Te6edf3formatBytesTb4b4b4(Te6edf3sTb4b4b4.Te6edf3totalTb4b4b4)Tffd700}Ta5d6ff total / Tffd700${Te6edf3formatBytesTb4b4b4(Te6edf3sTb4b4b4.Te6edf3limitTb4b4b4)Tffd700}Ta5d6ff limit (Tffd700${Tb4b4b4(Tb4b4b4(Te6edf3sTb4b4b4.Te6edf3heap Tff7b72/ Te6edf3sTb4b4b4.Te6edf3limitTb4b4b4) Tff7b72* T79c0ff100Tb4b4b4)Tb4b4b4.Te6edf3toFixedTb4b4b4(T79c0ff1Tb4b4b4)Tffd700}Ta5d6ff%)Ta5d6ff`
Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72export Tff7b72function Te6edf3enableHeapMonitorTb4b4b4(Te6edf3intervalMsTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3performanceTb4b4b4.Te6edf3memoryTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3warnTb4b4b4(
Ta5d6ff"[HeapMonitor] performance.memory is not available. Use Chrome and pass --enable-precise-memory-info."
Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3intervalId Tff7b72!== Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3clearIntervalTb4b4b4(Te6edf3intervalIdTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3ms Tff7b72= Te6edf3intervalMs Tff7b72&& Te6edf3intervalMs Tff7b72> T79c0ff0 Tff7b72? Te6edf3intervalMs Tff7b72: Te6edf3DEFAULT_INTERVALTb4b4b4;
Te6edf3logTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3intervalId Tff7b72= Te6edf3setIntervalTb4b4b4(Te6edf3logTb4b4b4, Te6edf3msTb4b4b4)Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Ta5d6ff`Ta5d6ff[HeapMonitor] enabled, sampling every Tffd700${Te6edf3msTffd700}Ta5d6ffmsTa5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72export Tff7b72function Te6edf3disableHeapMonitorTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3intervalId Tff7b72!== Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3clearIntervalTb4b4b4(Te6edf3intervalIdTb4b4b4)Tb4b4b4;
Te6edf3intervalId Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(Ta5d6ff"[HeapMonitor] disabled"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72export Tff7b72function Te6edf3heapSnapshotTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3s Tff7b72= Te6edf3sampleTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3sTb4b4b4) Tb4b4b4{
Te6edf3consoleTb4b4b4.Te6edf3tableTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4;
Te6edf3consoleTb4b4b4.Te6edf3logTb4b4b4(
Ta5d6ff`Ta5d6ff[HeapMonitor] heap usage: Tffd700${Te6edf3formatBytesTb4b4b4(Te6edf3sTb4b4b4.Te6edf3heapTb4b4b4)Tffd700}Ta5d6ff / Tffd700${Te6edf3formatBytesTb4b4b4(Te6edf3sTb4b4b4.Te6edf3limitTb4b4b4)Tffd700}Ta5d6ff (Tffd700${Tb4b4b4(Tb4b4b4(Te6edf3sTb4b4b4.Te6edf3heap Tff7b72/ Te6edf3sTb4b4b4.Te6edf3limitTb4b4b4) Tff7b72* T79c0ff100Tb4b4b4)Tb4b4b4.Te6edf3toFixedTb4b4b4(T79c0ff1Tb4b4b4)Tffd700}Ta5d6ff%)Ta5d6ff`
Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
T8b949e// Auto-start if VITE_HEAP_MONITOR is set
Tff7b72if Tb4b4b4(Tff7b72typeof Tff7b72importTb4b4b4.Te6edf3meta Tff7b72!== Ta5d6ff"undefined" Tff7b72&& Tff7b72importTb4b4b4.Te6edf3metaTb4b4b4.Te6edf3env Tff7b72&& Tff7b72importTb4b4b4.Te6edf3metaTb4b4b4.Te6edf3envTb4b4b4.Te6edf3VITE_HEAP_MONITORTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3interval Tff7b72= Tffa657parseIntTb4b4b4(Tff7b72importTb4b4b4.Te6edf3metaTb4b4b4.Te6edf3envTb4b4b4.Te6edf3VITE_HEAP_MONITORTb4b4b4, T79c0ff10Tb4b4b4)Tb4b4b4;
Te6edf3enableHeapMonitorTb4b4b4(Te6edf3interval Tff7b72> T79c0ff0 Tff7b72? Te6edf3interval Tff7b72: Tff7b72undefinedTb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e// Expose on window for runtime toggle
Tff7b72if Tb4b4b4(Tff7b72typeof Tffa657window Tff7b72!== Ta5d6ff"undefined"Tb4b4b4) Tb4b4b4{
Tffa657windowTb4b4b4.Te6edf3enableHeapMonitor Tff7b72= Te6edf3enableHeapMonitorTb4b4b4;
Tffa657windowTb4b4b4.Te6edf3disableHeapMonitor Tff7b72= Te6edf3disableHeapMonitorTb4b4b4;
Tffa657windowTb4b4b4.Te6edf3heapSnapshot Tff7b72= Te6edf3heapSnapshotTb4b4b4;
Tb4b4b4}
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────